In storage technology, a storage appliance is one type of computer that provides services relating to the organization and storage of information or data on storage devices such as, for example, disk drives (“disks”). In other words, a storage appliance is adapted to store and retrieve data on behalf of one or more client processing systems (“clients” or “hosts”) in response to external requests received from the hosts. A storage appliance can provide clients with file-level access to data stored in the storage devices. A storage appliance can also provide clients with block-level access to stored data, or with both file-level access and block-level access. For convenience, a storage appliance will be described herein, for the most part, in terms of the former, though the description herein will have application to the latter types of storage appliances as well, as will be apparent to those of ordinary skill in the art in light of the description that follows. Examples of such storage appliances include, but are not limited to, a file server or another type of computing device that provides storage services using a file system to respond to file-oriented data access requests (“filer”). A storage appliance includes a storage operating system that implements the file system to logically organize the information as a hierarchical structure of directories and files on the disks. Each file on a disk may be implemented as a set of data structures, e.g., disk blocks, which are configured to store information. A directory may be implemented as a formatted file in which information by other files and directories is stored.
An implemented disk storage for a storage appliance typically has one or more storage “volumes” which are a collection of physical storage disks and which define an overall logical arrangement of storage space. In other words, a storage volume is a logical container that includes a collection of disks. Therefore, the collection of disks is grouped (assimilated) into the storage volume. Each storage volume is generally associated with a file system.
A software application (e.g., third-party software application) can seek access to a file system in order to determine the changes that have occurred for files or directories in the file system. However, current methods for obtaining the changes in a file system would require the software application to traverse (i.e., perform the known “tree-walk” process) through each directory and through each branch from a directory, and to examine each file in each directory to determine which files have been modified, added, or accessed. The software application itself (which is external to a file server that stores a file system) is required to perform multiple reads to the file system by use of the tree-walk process across the directories in the file system, stores the results of the multiple reads to the file system, and determines the changes in the file system based on the results of these multiple reads to the file system. Furthermore, the tree-walk process by the software application is inefficient because this is a relatively time consuming process where data that are read from the directories are randomly placed across a disk in a non-sequential and random placement. This non-sequential and random placement of data results in a longer time to access the data.
Therefore, the current technology is limited in its capabilities and suffers from at least the above constraints and deficiencies.